/*
 * Copyright 2013 University of Padua, Italy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package it.dei.unipd.healthservice.servlet;


import it.dei.unipd.healthservice.database.FornisceDatabase;
import it.dei.unipd.healthservice.resource.Fornisce;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 
 * @author Valentini
 * @version 1.00
 */
public class AssegnaFornitoriServlet extends AbstractDatabaseServlet {

	/**
	 * Assegna i fornitori di una certa materia prima
	 * 
	 * @param req
	 *            la richiesta ricevuta dal client.
	 * @param res
	 *            la rispota fornita dal server.
	 * 
	 * @throws ServletException
	 *             se ci sono problemi nell'esecuzione della servlet.
	 * @throws IOException
	 *             se ci sono problemi nella comunicazione client-server.
	 */
	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		// imposta il tipo MIME della risposta
		res.setContentType("text/html");

		// ottiene un flusso di uscita per scrivere la risposta
		PrintWriter out = res.getWriter();
			
		// scrive la pagina HTML
		out.printf("<html>");
		out.printf("<head><title>Aggiornamento fornitori</title></head>");
		out.printf("<body>");
		out.printf("<h1></h1><br>");
		
	
		int idMateriaPrima;
		try{
			 idMateriaPrima = Integer.parseInt(req.getParameter("idMateriaPrima"));
		} catch(Exception e) {out.printf("errore idMateriaPrima: " +req.getParameter("idMateriaPrima")+"<br>"+e.getMessage()); return;}
			
		Fornisce fornisce = new Fornisce(idMateriaPrima);
		
		Connection con = null;

    	try {
    		con = DS.getConnection();
    		
    		new FornisceDatabase(con, fornisce).deleteFornisceByMateriaPrima();
    		    		
    		out.printf("lista fornitori precedente eliminata");    		
    	} 
    	catch (NullPointerException ex) {
    		out.printf("<p><center><font color=\"green\" size=\"+2\">Impossibile creare la connessione al database.</font></center></p>"); return;
    	}
    	catch (SQLException ex) {
    		out.printf(
    				"<p><center><font color=\"orange\" size=\"+2\">Errore durante l'accesso al database: %s</font></center></p>",
    				ex.getMessage()); return;
    	}
    	
    	
    	
    	
    	//Salvataggio nuova distinta base
    	String[] piva = null;
    	String[] costi = null;
    	try{
    	//recupero indici e quantità
		 piva = req.getParameterValues("piva");
		 costi = req.getParameterValues("costo");
    	}catch(Exception ex){ piva=null; costi=null; }
    	
    	if(piva==null||costi==null)
    		//torna alla pagina di provenienza
			res.sendRedirect("assegna_fornitori.jsp?idMateriaPrima="+idMateriaPrima+"&aggiornato=true");
    	
    	int i=0;
		//lista di elementi da inserire nel database
		List<Fornisce> fornitori = new ArrayList<Fornisce>();
		
		if(piva.length>0 && costi.length>0)
			for(String pivaFornitore : piva)
			{
				fornitori.add(new Fornisce(pivaFornitore,idMateriaPrima,costi[i]));
				i++;	
			}
		
		
	    for(Fornisce currentFornisce : fornitori)
	    {
	    	//inserimento nel database
	    	try {
	    		con = DS.getConnection();
	    		
	    		new FornisceDatabase(con, currentFornisce).createFornisce();
	    		
	    		out.println("<br>Inserito: "+currentFornisce.getIdMateriaPrima()+" "+currentFornisce.getPiva()+" "+currentFornisce.getCosto());
	    		
	    	} 
	    	catch (NullPointerException ex) {
	    		out.printf("<p><center><font color=\"cyan\" size=\"+2\">Impossibile creare la connessione al database.</font></center></p>");
	    		return;
	    	}
	    	catch (SQLException ex) {
	    		out.printf(
	    				"<p><center><font color=\"red\" size=\"+2\">Errore durante l'accesso al database: %s</font></center></p>",
	    				ex.getMessage());
	    		return;
	    	}
	    
	    }//end for each
	    
		//torna alla pagina di provenienza
		res.sendRedirect("assegna_fornitori.jsp?idMateriaPrima="+idMateriaPrima+"&aggiornato=true");
	 	//out.println("Operazione riuscita");
		out.printf("</body></html>");

		// assicura che tutto il contenuto sia inviato
		out.flush();

		// chiude il flusso di uscita
		out.close();

	
		

	}

}
